#!/usr/bin/env node

/**
 * 预约功能测试脚本
 *
 * 使用方法：
 *   node scripts/test-booking.mjs single          # 单个预约测试
 *   node scripts/test-booking.mjs multi [count]  # 多进程预约测试（默认5个）
 *   node scripts/test-booking.mjs compare [count] # 性能对比测试（默认5个）
 */

import { spawn } from 'node:child_process'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'

const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const projectRoot = join(__dirname, '..')

// 先注册路径别名（如果 tsconfig-paths 可用）
// 使用动态导入避免未安装时报错
try {
  const tsconfigPaths = await import('tsconfig-paths')
  tsconfigPaths.register({
    baseUrl: projectRoot,
    paths: {
      '@shared/*': ['src/shared/*'],
      '@renderer/*': ['src/renderer/src/*'],
    },
  })
}
catch {
  // tsconfig-paths 未安装，tsx 可能会自动处理路径别名
  // 如果 tsx 也无法处理，会显示模块未找到的错误
}

const args = process.argv.slice(2)
const testType = args[0] || 'single'
const count = args[1] || '5'

// 测试文件路径
const testFile = join(projectRoot, 'src', 'main', 'booking', 'multiprocess', '__tests__', 'booking-test.ts')

console.log('预约功能测试')
console.log('='.repeat(60))
console.log(`测试类型: ${testType}`)
if (testType === 'multi' || testType === 'compare') {
  console.log(`预约数量: ${count}`)
}
console.log('='.repeat(60))
console.log()

// 使用 tsx 运行 TypeScript 文件
// 需要安装: npm install -D tsx tsconfig-paths
// 路径别名在测试文件内部注册
const command = 'npx'
const commandArgs = [
  'tsx',
  '--tsconfig',
  join(projectRoot, 'tsconfig.node.json'),
  testFile,
  testType,
  ...(testType === 'multi' || testType === 'compare' ? [count] : []),
]

const proc = spawn(command, commandArgs, {
  cwd: projectRoot,
  stdio: 'inherit',
  shell: true,
})

proc.on('close', (code) => {
  process.exit(code || 0)
})

proc.on('error', (error) => {
  console.error('执行测试失败:', error)
  console.error('\n提示: 请确保已安装必要的依赖:')
  console.error('  npm install -D tsx tsconfig-paths')
  console.error('  或')
  console.error('  pnpm add -D tsx tsconfig-paths')
  process.exit(1)
})
